package com.itheima.mapper;

import com.itheima.annotation.DeleteOrUpdate;
import com.itheima.annotation.InsertOrUpdate;
import com.itheima.annotation.SysLog;
import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.util.List;

/**
 * 员工管理
 */
@Mapper // 1.放入IOC容器 2.帮我们创建了一个代理对象
public interface EmpMapper {


    /**
     * 选择列表
     *
     * @param name   名称
     * @param gender 性别
     * @param begin  开始
     * @param end    终止
     * @return {@link List}<{@link Emp}>
     */
    List<Emp> selectList(String name, Short gender, LocalDate begin, LocalDate end);

    /**
     * 选择计数
     *
     * @param name   名称
     * @param gender 性别
     * @param begin  开始
     * @param end    终止
     * @return {@link Long}
     */
    Long selectCount(String name, Short gender, LocalDate begin, LocalDate end);

    /**
     * 按ID删除
     *
     * @param ids ids
     */
    @SysLog
    @DeleteOrUpdate
    void deleteByIds(List<Integer> ids);

    /**
     * 新增
     *
     * @param emp emp
     */
    @InsertOrUpdate
    @SysLog
    void insert(Emp emp);

    /**
     * 按用户名选择计数
     *
     * @param username 用户名
     * @return {@link Integer}
     */
    @Select("select count(*) from emp where username = #{username}")
    Integer selectCountByUsername(String username);

    /**
     * 按id选择
     *
     * @param id id
     * @return {@link Emp}
     */
    @Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time " +
            "from emp where id = #{id}")
    Emp selectById(Integer id);

    /**
     * 使现代化
     *
     * @param emp emp
     */
    @SysLog
    @DeleteOrUpdate
    void update(Emp emp);

    /**
     * 按用户名选择
     *
     * @param username 用户名
     * @return {@link Emp}
     */
    @Select("select * from emp where username = #{username} ")
    Emp selectByUsername(String username);

    /**
     * 按部门id删除
     *
     * @param deptId 部门id
     */
    @SysLog
    @DeleteOrUpdate // 反射的内容
    @Delete("delete from emp where dept_id = #{deptId}")
    void deleteByDeptId(Integer deptId);
}
